package com.dong.ui.view;

import com.dong.common.pojo.ResultVO;
import com.dong.common.util.RequestUtils;
import com.dong.common.view.CommonView;
import com.dong.ui.component.CommonDialog;
import com.dong.ui.util.MessageUtils;

import javax.swing.*;
import java.awt.*;
import java.util.HashMap;
import java.util.Map;

/**
 * @description:
 * @author: 陈瑞东
 * @create: 2021-09-01 14:10
 */
public class DetailEditFrame extends CommonDialog implements CommonView {
    private JDialog jd = this;

    /*==================组件==================*/
    private static final int WIDTH = 800;
    private static final int HEIGHT = 600;

    private JTextArea editArea;

    private JScrollPane editScrollPane;

    private JButton confirmBtn;
    private JButton cancelBtn;
    /*==================组件==================*/
    /*==================参数==================*/
    private String id;
    private String text;
    private String field;
    private FoodDetailFrame parent;
    /*==================参数==================*/
    /*==================标志==================*/
    boolean requestFlag = true;

    /*==================标志==================*/


    @Override
    public void init(Map<String, Object> params) {
        // 设置标题
        setTitle("编辑");
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        initParams(params);
        initComponent();
        handleView();

        // 设置大小
        setSize(new Dimension(WIDTH, HEIGHT));
        // 设置不可改变大小
        setResizable(false);
        // 设置居中
        setLocationRelativeTo(null);
        // 在显示前处理，否则会被阻塞（模态框），无法加载事件
        handleAction();
        // 设置可见
        setVisible(true);
    }

    @Override
    public void initComponent() {
        editArea = new JTextArea(15, 50);
        editArea.setTabSize(4);
        editArea.setLineWrap(true);
//        editArea.setWrapStyleWord(true);
        editArea.setText(text);

        editScrollPane = new JScrollPane(editArea);

        confirmBtn = new JButton("确定");
        cancelBtn = new JButton("取消");
    }

    public void initParams(Map<String, Object> params) {
        if (params != null) {
            id = (String) params.get("id");
            field = (String) params.get("field");
            text = (String) params.get("text");
            parent = (FoodDetailFrame) params.get("parent");
        }
        initParams();
    }

    @Override
    public void initParams() {

    }


    @Override
    public void handleView() {
        Box hBox = Box.createHorizontalBox();
        Box vBox = Box.createVerticalBox();

        Box btnHBox = Box.createHorizontalBox();
        btnHBox.add(confirmBtn);
        btnHBox.add(Box.createHorizontalStrut(10));
        btnHBox.add(cancelBtn);

        vBox.add(Box.createVerticalStrut(20));
        vBox.add(editScrollPane);
        vBox.add(Box.createVerticalStrut(10));
        vBox.add(btnHBox);
        vBox.add(Box.createVerticalStrut(20));

        hBox.add(Box.createHorizontalStrut(20));
        hBox.add(vBox);
        hBox.add(Box.createHorizontalStrut(20));

        this.add(hBox);


    }

    @Override
    public void handleAction() {
        // 点击取消事件
        cancelBtnClickEvent();
        // 点击确定事件
        confirmBtnClickEvent();
    }

    /**
     * 点击确定事件
     */
    private void confirmBtnClickEvent() {
        confirmBtn.addActionListener(e -> {
            // 弹出确认框
            int option = MessageUtils.showConfirmDialog(jd, "是否确定修改文本?", "确认", JOptionPane.YES_NO_OPTION);
            if (option == JOptionPane.YES_OPTION) {
                // 调用接口修改文本
                updateField();
            }
        });
    }

    /**
     * 修改字段
     */
    private void updateField() {
        String text = editArea.getText();
        Map<String, Object> params = new HashMap<String, Object>() {{
            put("id", id);
            put(field, text);
        }};
        ResultVO<Void> request = (ResultVO<Void>) RequestUtils.sendRequest("food/saveDetail", params);
        if (request.isSuccess()) {
            MessageUtils.showMessageDialog(jd, "修改成功", "成功", JOptionPane.INFORMATION_MESSAGE);
            parent.setText(field, text);
            jd.dispose();
        } else {
            MessageUtils.showMessageDialog(jd, request.getMessage(), "失败", JOptionPane.WARNING_MESSAGE);
        }
    }

    /**
     * 点击取消事件
     */
    private void cancelBtnClickEvent() {
        cancelBtn.addActionListener(e -> {
            this.dispose();
        });
    }

    /**
     * 请求开始
     */
    private void requestBegin() {
        // 设置鼠标图标为加载图标
        this.setCursor(new Cursor(Cursor.WAIT_CURSOR));
        // 设置不能登录
        this.requestFlag = false;
    }

    /**
     * 请求结束
     */
    private void requestEnd() {
        // 还原鼠标图标
        this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
        // 设置可以登录
        this.requestFlag = true;
    }
}
